package android.game.tetris;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;

public class TileView extends View {

    /**
     * Các thông số kiểm soát kích thước của gạch và phạm vi của chúng trong vòng xem.
     * Chiều rộng / Chiều cao tính bằng pixel, và Drawables sẽ được thu nhỏ để phù hợp với những
     * Kích thước. Đếm Tile X / Y là số gạch này sẽ được rút ra.
     */

    protected int iKichThuocGach;

    //khai báo số cột của ma trận
    protected int iCot;
    //khai báo số hàng của ma trận
    protected int iHang;

    private int iColumnOffset;
    private int iRowOffset;


    //Khởi tạo bitmap
    private Bitmap[] mTileArray; 

    //Khởi tạo mảng 2 chiều của ma trận 
    private int[][] mTileGrid;

    private Paint mPaint = new Paint();
     
    //thiết lập giao diện
    private void initTileView()
    {
        int w = getWidth();
        int h = getHeight();
        
        if(w > 0 && h > 0)
        {
            iCot = 10;
            iHang = 18;
            
            int x = (int) Math.floor(w / iCot);
            int y = (int) Math.floor(h / iHang);
            
            iKichThuocGach = Math.min(x, y);
            mTileGrid = new int[iCot][iHang];            
        }
        else
        {
        	iCot = 0;
        	iHang = 0;        	
        	iKichThuocGach = 0;
        }        
        return;
    }
  //phương thức thiết lập các bối cảnh, set thuộc tính
    public TileView(Context context, AttributeSet attributeset, int defStyle) {
        super(context, attributeset, defStyle); 
        initTileView();
    }

    public TileView(Context context, AttributeSet attributeset) {
        super(context, attributeset);
        initTileView();
    }

    
    
    /**
     * Thuộc các mảng bên trong của file ảnh được sử dụng cho các tấm vẽ, và
     * Thiết lập các chỉ số tối đa của gạch được chèn
     */
    
    public void resetTiles(int tilecount) 
    {
        mTileArray = new Bitmap[tilecount];
    }


    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) 
    {        
        initTileView();
    }

    //thiết lập các ô vuông nhỏ trong khung hình game
    public void loadTile(int key, Drawable tile) 
    {
        Bitmap bitmap = Bitmap.createBitmap(iKichThuocGach, iKichThuocGach, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        tile.setBounds(0, 0, iKichThuocGach, iKichThuocGach);
        tile.draw(canvas);
        
        mTileArray[key] = bitmap;
    }

    @Override
    //vẽ khung để hiển thị lên màn hình
    public void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        for (int x = 0; x < iCot; x += 1) 
        {
            for (int y = 0; y < iHang; y += 1) 
            {
                if (mTileGrid[x][y] >= 0) 
                {  
                	//vẽ các lưới trong khung
                    canvas.drawBitmap(mTileArray[mTileGrid[x][y]],
                    		iColumnOffset + x * iKichThuocGach,
                            iRowOffset + y * iKichThuocGach,
                            mPaint);
                }
            }
        }

    }

}